
import { OmitDto, Rule, RuleType } from "@midwayjs/validate";

export class BaseTeamDto {
	@Rule(RuleType.number().required().min(0))
	teamId: number;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	groupId?: number;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	teamName?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	teamLink?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	summary?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	selectFlag?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	createBy?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	createTime?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	updateBy?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	updateTime?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	remark?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	status?: string;

	@Rule(RuleType.string().optional().allow(null).allow('').max(500))
	delFlag?: string;

}

export class CreateTeamDto extends OmitDto(BaseTeamDto, ['teamId']) {
	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	deptId?: number;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	gradeId?: number;

	@Rule(RuleType.string().optional().allow(null).allow(''))
	teacherVolunteers?: string;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	leaderId?: number;

	@Rule(
		RuleType.array()
			.items(
				RuleType.object().keys({
					studentId: RuleType.number().required().min(0),
					isLeader: RuleType.string().optional().valid('0', '1'),
				})
			)
			.optional()
	)
	students?: Array<{ studentId: number; isLeader?: string }>;
}
export class UpdateTeamDto extends BaseTeamDto {
	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	deptId?: number;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	gradeId?: number;

	@Rule(RuleType.string().optional().allow(null).allow(''))
	teacherVolunteers?: string;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	leaderId?: number;

	@Rule(
		RuleType.array()
			.items(
				RuleType.object().keys({
					studentId: RuleType.number().required().min(0),
					isLeader: RuleType.string().optional().valid('0', '1'),
				})
			)
			.optional()
	)
	students?: Array<{ studentId: number; isLeader?: string }>;
}
export class QueryTeamDto extends CreateTeamDto {
	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	teamId?: number;
	@Rule(RuleType.number().optional().min(0))
	pageNum?: number;

	@Rule(RuleType.number().optional().min(0))
	pageSize?: number;

	// 新增搜索字段
	@Rule(RuleType.string().optional().allow('').max(100))
	groupName?: string;

	@Rule(RuleType.string().optional().allow('').max(10))
	isAssigned?: string; // 0-未分配，1-已分配

	@Rule(RuleType.string().optional().allow('').max(50))
	stuId?: string;

	@Rule(RuleType.string().optional().allow('').max(100))
	studentName?: string;

	@Rule(RuleType.string().optional().allow('').max(100))
	teacherName?: string;

	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	teacherId?: number;
	@Rule(RuleType.string().optional().valid('0', '1'))
	isSelected?: string;
}
export class ListTeamDto extends BaseTeamDto { }

export class TeacherDto {
	@Rule(RuleType.number().required().min(0))
	teacherId: number;
	@Rule(RuleType.number().optional().allow(null).allow('').min(0))
	sort?: number;
}

export class teamTeacherDto {
	@Rule(RuleType.number().required().min(0))
	teamId: number;

	@Rule(RuleType.array().required().items(RuleType.object().keys({
		teacherId: RuleType.number().required().min(0),
		sort: RuleType.number().optional().allow(null).allow('').min(0),
	})))
	teachers: Array<TeacherDto>;
}
export class getTeacherDto {

	@Rule(RuleType.number().required())
	teacherId: number;


}

// 学生退出队伍DTO
export class ExitTeamDto {
	@Rule(RuleType.number().required().min(1))
	teamId: number;

	@Rule(RuleType.number().required().min(1))
	studentId: number;
}
